package main

import "fmt"

func maxProduct(nums []int) int {
	if len(nums) == 0 {
		return 0 // 如果数组为空，返回0
	}

	maxProd := nums[0]
	minProd := nums[0]
	result := nums[0]

	start := 0
	end := 0
	tempStart := 0

	for i := 1; i < len(nums); i++ {
		if nums[i] < 0 {
			// 如果当前元素为负数，交换最大值和最小值
			maxProd, minProd = minProd, maxProd
		}

		// 更新最大和最小乘积
		maxProd = max(nums[i], maxProd*nums[i])
		minProd = min(nums[i], minProd*nums[i])

		// 更新结果
		if maxProd > result {
			result = maxProd
			start = tempStart // 更新最大乘积子数组的起始下标
			end = i           // 更新结束下标
		}

		// 如果 maxProd 等于当前元素，更新当前子数组的起始下标
		if maxProd == nums[i] {
			tempStart = i
		}

		// 更新结果
		result = max(result, maxProd)
	}
	fmt.Printf("子数组下标: (%d, %d)\n", start, end) // 输出: 子数组下标: (0, 1)
	return result
}

func main() {
	nums := []int{-2, 3, -4}
	fmt.Println(maxProduct(nums))
	nums1 := []int{2, 3, -2, 4, 5, -1}
	fmt.Println(maxProduct(nums1))
}
